package cn.itcast.web.controller.cargo;

import cn.itcast.domain.cargo.Contract;
import cn.itcast.domain.cargo.Export;
import cn.itcast.domain.cargo.ExportProduct;
import cn.itcast.domain.cargo.ExportProductExample;
import cn.itcast.domain.system.User;
import cn.itcast.service.cargo.ExportProductService;
import cn.itcast.service.cargo.ExportService;
import cn.itcast.utils.BeanMapUtils;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 测试PDF文件生成下载
 */

@Controller
@RequestMapping("/cargo/export/")
public class PdfController extends BaseController {

    @Reference
    private ExportService exportService;

    @Reference
    private ExportProductService exportProductService;


    /**
     * 出口报运单PDF文件
     *  参数：
     *      id：报运单id
     *  业务逻辑
     *      1、根据id查询报运单对象
     *      2、根据报运单ID查询报运单商品
     *      3、将报运单对象转化为Map集合
     *      4、调用japer加载模板，导入PDF
     */
    @RequestMapping(value = "/exportPdf")
    public void exportPdf(String id) throws Exception {
        //1、根据id查询报运单对象
        Export export = exportService.findById(id);
        //2、根据报运单ID查询报运单商品
        ExportProductExample example = new ExportProductExample();
        ExportProductExample.Criteria criteria = example.createCriteria();
        criteria.andExportIdEqualTo(id);
        List<ExportProduct> list = exportProductService.findAll(example);
        //3、将报运单对象转化为Map集合
        Map map = BeanMapUtils.beanToMap(export);
        //4、调用jasper加载模板，导入PDF
        //4.1 获取模板路径
        String path = session.getServletContext().getRealPath("/")+"/jasper/export.jasper";
        //4.2 数据填充
        JRDataSource dataSource = new JRBeanCollectionDataSource(list);
        JasperPrint print = JasperFillManager.fillReport(path, map, dataSource);
        //4.3 导出
        JasperExportManager.exportReportToPdfStream(print, response.getOutputStream());
    }


    /**
     * 案例：pdf中的数据填充-List集合数据
     */
//    @RequestMapping(value = "/exportPdf")
//    public void exportPdf() throws Exception {
//        //1、获取模板的路径
//        String path = session.getServletContext().getRealPath("/")+"/jasper/test03.jasper";
//        //2、数据填充（JasperFillManager）
//        Map map = new HashMap<>();
//        List<User> list = new ArrayList<>();
//        for (int i = 0; i <5 ; i++) {
//            User user = new User();
//            user.setUserName("用户"+i);
//            user.setEmail(i+"@163.com");
//            user.setCompanyName("传智播客");
//            list.add(user);
//        }
//        JRDataSource dataSource = new JRBeanCollectionDataSource(list);
//        JasperPrint jasperPrint = JasperFillManager.fillReport(path,map,dataSource);
//        //3、文件导出（JasperExportManager）
//        JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
//    }

    /**
     * 案例：pdf中的数据填充-map集合数据
     */
//    @RequestMapping(value = "/exportPdf02")
//    public void exportPdf02() throws Exception {
//        //1、获取模板的路径
//        String path = session.getServletContext().getRealPath("/")+"/jasper/test02.jasper";
//        //2、数据填充（JasperFillManager）
//        Map map = new HashMap<>();
//        map.put("username", "张三");
//        map.put("age", 18);
//        map.put("email", "zhangsan@itcast.cn");
//        map.put("address", "北京顺义");
//        JRDataSource dataSource = new JREmptyDataSource();
//        JasperPrint jasperPrint = JasperFillManager.fillReport(path,map,dataSource);
//        //3、文件导出（JasperExportManager）
//        JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
//    }
    /**
     * 案例：pdf的入门案例
     *  1、设计模板
     *  2、数据填充(向pdf模板填充数据)
     *  3、文件导出（预览，下载）
     */
//    @RequestMapping(value = "/exportPdf01")
//    public void exportPdf01() throws Exception {
//
//        //1、获取pdf模板文件的路径
//        String path = session.getServletContext().getRealPath("/")+"/jasper/test01.jasper";
//        //2、数据填充
//        /**
//         * 1.模板路径
//         * 2.map数据
//         * 3.jrdatasource(list集合参数);
//         */
//        JasperPrint jasperPrint = JasperFillManager.fillReport(path, new HashMap<>(), new JREmptyDataSource());
//        //3、文件导出(预览)
//        /**
//         * 参数1：jasperPrint
//         * 参数2：response中的outputstram对象
//         */
//        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
//    }
}
